package org.xs.web.util;

import java.util.ArrayList;
import java.util.List;

public class Sorter<T> {
	private List<SortItem<T>> list ;
	
	public List<SortItem<T>> sort(List<SortItem<T>> list){
		this.list = list;
		ArrayList<SortItem<T>> res = new ArrayList<SortItem<T>>();
		SortItem<T> inmost = null;
		do {
			inmost = getInmost();
			if(inmost != null){
				res.add(inmost);
				remove(inmost);
			}
			
		} while (!list.isEmpty() && inmost != null);
		
		return res;
	}
	
 
	private void remove(SortItem<T> o){
		list.remove(o);
		for(SortItem<T> item : list){
			item.getWithin().remove(o);
		}
	}
	
	private SortItem<T> getInmost(){
		SortItem<T> res = null;
		for(SortItem<T> item : list){
			if(item.getWithin().isEmpty() && nobodyWantsAround(item)){
				res = item;
				break;
			}
		}
		return res;
	}


	private boolean nobodyWantsAround(SortItem<T> o) {
		boolean res = true;
		for(SortItem<T> item : list){
			if(item.getAround().contains(o)){
				res = false;
				break;
			}
		}
		return res;
	}
}
